
package com.utils;


import java.util.Set;

import javax.validation.ConstraintViolation;
import javax.validation.Validation;
import javax.validation.Validator;

import com.entity.EIException;

/**
 * hibernate-validator校验工具类
 */
public class ValidatorUtils {
    private static Validator validator;

    static {
        validator = Validation.buildDefaultValidatorFactory().getValidator();
    }
//Validator 是 Hibernate Validator 框架中的核心接口，用于执行对象的校验操作。
    /**
     * 校验对象
     * @param object        待校验对象
     * @param groups        待校验的组
     * @throws EIException  校验不通过，则报EIException异常
     */
    //validator.validate(object, groups) 方法对传入的 object 对象进行校验，并根据 groups 指定的组来应用相应的校验规则。该方法返回一个 Set<ConstraintViolation<Object>> 集合，其中每个 ConstraintViolation 对象表示一个校验失败的约束。
    //if (!constraintViolations.isEmpty()) 检查校验结果集合是否为空。如果不为空，说明存在校验失败的约束。
    //constraintViolations.iterator().next() 从校验结果集合中取出第一个校验失败的约束。
    //throw new EIException(constraint.getMessage()) 抛出一个 EIException 异常，异常信息为校验失败的约束的错误消息。
    public static void validateEntity(Object object, Class<?>... groups)
            throws EIException {
        Set<ConstraintViolation<Object>> constraintViolations = validator.validate(object, groups);
        if (!constraintViolations.isEmpty()) {
        	ConstraintViolation<Object> constraint = (ConstraintViolation<Object>)constraintViolations.iterator().next();
            throw new EIException(constraint.getMessage());
        }
    }
    //public static 表示这是一个公共的静态方法，可以直接通过类名调用。
    //void 表示方法没有返回值。
    //object 是待校验的对象。
    //groups 是一个可变参数，表示待校验的组。在 Hibernate Validator 中，可以通过组来对校验规则进行分组，以便在不同的场景下使用不同的校验规则。
    //throws EIException 表示该方法可能会抛出 EIException 异常。
    
}
